docs: changelog and blog post for v0.10.0 - #4245
Draft
nicoloboschi wants to merge 2 commits into
Draft
Conversation
nicoloboschi
force-pushed
the
docs-changelog-0.10.0
branch
9 times, most recently
from
September 11, 2026 14:18
c23e162 to
9c2ed7c
Compare
The 0.10.0 range summarized to 37 entries, against 65 for the 145-commit release before it: whole user-facing fixes were unlisted. Measured on that range, holding model and prompt fixed, one call over the whole release produces 120 entries against 152 for five batches — 40 commits get an entry only when batched, against 8 only when not. The input was never the constraint: a 245-commit release is ~8500 tokens of commit subjects in total, so every arrangement fits the context window many times over. What batching bounds is how many commits the model weighs at once before it starts summarizing them away. * Commits are batched by token count and the batches summarized concurrently, followed by a dedup pass that merges the same change described twice across a batch boundary. The dedup result is re-ordered by the release's own commit order and filtered to commit_ids that were in the input, so a dropped or invented id cannot reorder the changelog or point a reader at a commit that isn't there. * max_completion_tokens=16000 was a *shared* budget on a reasoning model — reasoning bills against it, so a long commit list spends most of it before the first entry is emitted. Worth 8 entries on its own (37 -> 45). Raised to 100000. * The grouping rule read as licence to merge unrelated fixes that touch the same area, and "focus on user-facing changes" as licence to drop anything whose commit title sounds internal. Both are now scoped; this was the largest single effect (45 -> 126). Default model is now gpt-5.6-terra.
nicoloboschi
force-pushed
the
docs-changelog-0.10.0
branch
from
September 11, 2026 14:21
9c2ed7c to
92b26ce
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changelog entry and release blog post for v0.10.0, prepared ahead of the release — the tag does not exist yet and no release was triggered.
generate-changelogrefuses to run without the tag, sov0.10.0was created locally onorigin/main, used to generate the entry, and deleted immediately. It was never pushed, sorelease.shcan still create it normally.Contents
hindsight-docs/src/pages/changelog/index.md— generated 0.10.0 entry: 3 breaking changes, 27 features, 30 improvements, 105 fixes, and one migration (e2f4a6c8b0d1,attachments+document_attachments— both new and empty, so quick on any deployment size).hindsight-docs/blog/2026-09-09-version-0-10-0.md— hand-written release notes.skills/hindsight-docs/references/changelog/index.md— the skill's changelog mirror.What the blog post covers
multi-textentity labels (feat(entity-labels): add an open-vocabulary multi-valued label type (multi-text) #4027)ModuleNotFoundErrorupgrade step,StaticKeysTenantExtension(feat(extensions): add StaticKeysTenantExtension — env-configured per-user API keys with per-schema isolation #3675), Meta Model API provider (feat(llm): add Meta Model API as a first-class provider #4081), worker bank rotation (fix(worker): rotate slots across banks so bulk ingest stops starving them (#3861) #3980), mental-model list defaulting to metadata (feat(mental-models): default list to metadata; MCP list returns metadata only #4225), reflect grounding and delta-refresh fixes (fix(reflect): grounding defects in reflect and knowledge-page delta refresh, plus system-evals #4304)410 Gone(feat(api)!: retire the bank profile and background endpoints #4127);curlis gone from the Docker images (fix(docker): stop installing curl into the cp-only image #4199, fix(docker): drop curl from the API runtime images #4202), which breaks any user-defined healthcheck that execscurlinside the containerThe per-bank text-search switch (#3819) and webhook signatures (#3986) are in the changelog but not the blog post.
Manual edits to the generated entry
--event-loops(feat: run Hindsight on free-threaded CPython 3.14 (-py3.14t image) #4037, feat(api): serve from several event loops in one process #4067, and their follow-ups) — reverted by revert: drop free-threaded CPython 3.14 support (#4037, #4067) #4234 before release.Second commit: a generator fix
The first pass produced 37 entries for 221 core commits, against 65 for the 145-commit release before it — whole user-facing fixes went unlisted. Three causes, measured separately on that range:
max_completion_tokens16000 → 100000max_completion_tokenswas a shared budget on a reasoning model — reasoning bills against it, so a long commit list spends most of it before the first entry.The input was never the constraint. A 245-commit release is ~8500 tokens of commit subjects in total, so every arrangement fits the context window many times over. The batch budget is 2000 tokens; what it bounds is how many commits the model weighs at once before it starts summarizing them away.
The dedup result is re-ordered by the release's own commit order and filtered to commit_ids that were in the input, so a dropped or invented id can't reorder the changelog. Default model is now
gpt-5.6-terra.tests/test_generate_changelog_batching.pycovers the batching arithmetic and the dedup guarantees with the LLM stubbed.Latest run, against
mainat 630c3a6: 240 core commits, 173 entries in 5 batches, 4 deduped.Before merging
/img/blog/version-X-Y-Z-release.png; this one still needs one.openapi.jsonin the skill still reads 0.9.2 — correct today; it needs a re-sync oncerelease.shbumps the version.